5322. Системы счисления - 1

 

Число a записано в двоичной системе счисления. Вывести число a в шестнадцатеричной системе счисления без ведущих нулей.

 

Вход. Число a, записанное в двоичной системе счисления, 0 < длина числа ≤ 104.

 

Выход. Выведите число a, переведённое в шестнадцатеричную систему счисления, записанное с помощью символов '0', …, '9' и 'A', …, 'F'.

 

Пример входа

Пример выхода

10

2

 

 

РЕШЕНИЕ

элементарная задача

 

Анализ алгоритма

Прочитаем строку из 0 и 1 в символьный массив. Выделим четверки символов, начиная с конца. Далее выведем эти четверки нулей и единиц в виде символов в шестнадцатеричной системе счисления.

 

Пример

Рассмотрим число 1101111112 = 1BF16, его длина len = 9.

Стартовой позицией будет start =  len % 4 = 1. Заполняем нулями ячейки s[1..3].

 

Реализация алгоритма

Строку храним в массиве s.

 

#define MAX 10010

char s[MAX];

 

Читаем строку, начиная с 4-ой позиции строки s.

 

gets(s+4); len = strlen(s+4);

 

Вычисляем индекс начала строки. Дополняем первую четверку нулями.

 

start = (len % 4) ? len % 4 : 4;

for(i = start; i < 4; i++) s[i] = '0';

 

Обрабатываем последовательно четверки символов. Выводим соответствующий символ в шестнадцатеричной системе счисления.

 

for(i = start; i <= len; i +=  4)

{

  sscanf(s+i,"%1d%1d%1d%1d",&a,&b,&c,&d);

  printf("%X",a*(1<<3) + b*(1<<2) + c*(1<<1) + d);

}

printf("\n");